#ifndef MUSIC_COMPONENT_H
#define MUSIC_COMPONENT_H

#include <QWidget>
#include <QMediaPlayer>
#include <QUrl>

#include <QListWidget>
#include <QListWidgetItem>
//网络请求相关头文件
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>

#include <QDir>
#include <QFile>
#include <QTextStream>
#include <QMessageBox>

#include <QStackedWidget>  // 添加堆叠窗口支持
#include "song_list_interface.h"// 歌单界面头文件
#include "lyrics_interface.h"  // 歌词界面头文件

#include <QMessageBox>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>

QT_BEGIN_NAMESPACE
namespace Ui { class MusicComponent; }
QT_END_NAMESPACE

class MusicComponent : public QWidget
{
    Q_OBJECT

public:
    MusicComponent(QWidget *parent = nullptr);
    ~MusicComponent();

    QMediaPlayer * Media;
protected:
    bool eventFilter(QObject *obj, QEvent *event) override;  // 事件过滤器

private slots:

    void searchMusic();
    void handleSearchReply();
    void onItemClicked(QListWidgetItem *item);
    void playMusic();
    void pauseMusic();           // 暂停歌曲

    void onPlaylistButtonClicked();// 歌单按钮点击槽函数

    void onCreatePlaylist();      // 创建歌单
    void onDeletePlaylist();      // 删除歌单
    void onPlaylistItemClicked(QListWidgetItem *item); // 歌单项点击
    void onBackFromSongList();    // 从歌单界面返回
    void onPlaylistItemDoubleClicked(QListWidgetItem *item); // 双击歌单项

    void showLyricsInterface();   // 显示歌词界面
    void backToMainInterface();   // 返回主界面

    void fetchLyrics();               // 获取歌词
    void handleLyricsReply();         // 处理歌词响应

    void onAddSongToPlaylistRequested(const QString& playlistName); // 处理添加歌曲到歌单请求
    void onSongDoubleClickedFromPlaylist(); // 处理歌单中歌曲双击
    void onDeleteSongFromPlaylist(const QString& songInfo); // 处理删除歌单中的歌曲

    void onPreviousSongRequested();
    void onNextSongRequested();
    void onMediaStatusChanged(QMediaPlayer::MediaStatus status);

    void updateCurrentLyricDisplay(const QString& lyric); // 更新当前歌词显示

private:
    Ui::MusicComponent *ui;
    QNetworkAccessManager *manager;  // 网络请求管理器
    QString selectedSongId;          // 选中歌曲的ID
    QString currentPlayingSongId;    // 当前正在播放的歌曲ID
    QString currentPlaylist;         // 当前选中的歌单
    song_list_interface *songListInterface; // 歌单详情界面

    Lyrics_interface *lyricsInterface;      // 歌词界面
    QStackedWidget *stackedWidget;          // 堆叠窗口，用于界面切换

    void loadPlaylists();            // 加载歌单列表
    void savePlaylist(const QString& playlistName, const QString& content = ""); // 保存歌单
    void deletePlaylistFile(const QString& playlistName); // 删除歌单文件
    QString getPlaylistFilePath(const QString& playlistName); // 获取歌单文件路径
    void loadUserCreatedPlaylists();  // 加载用户创建的歌单
    QString currentLyrics;            // 当前歌曲的歌词

    void updateLyricsPlaylist(); // 更新歌词界面的歌单列表
    void resetSongListInterface(); // 重置歌单界面状态
    void showPlaylistList();          // 显示歌单列表
    void resetWidget2ToOriginal();    // 重置widget_2到原始状态
    void debugUIState(); // 调试UI状态
    QStringList defaultPlaylistSongs;  // 默认歌单歌曲列表
    int currentPlayIndex;              // 当前播放索引
    bool isDefaultPlaylistMode;        // 是否处于默认播放模式

    void loadDefaultPlaylist();
    void playSongFromDefaultPlaylist();
    void switchToDefaultPlaylistMode();

    QStringList searchResultIds;      // 搜索结果的歌曲ID列表
    int currentSearchIndex;           // 当前搜索结果的索引
};
#endif // MUSIC_COMPONENT_H
